The distribution of work among a limited number of workers is a common problem found in everyday life. In one simple approach, each worker maintains a queue of tasks to keep busy. At times, however, a worker can complete the tasks and await further work, wasting time. In another simple approach, all tasks are allocated to a central task allocator. The central task allocator can monitor and dispatch tasks to the workers so that no workers are without work. Workers can have only one task in their queue at a time, or multiple tasks.
Computing task distribution among interconnected computers is an important problem in computer networks. Referring to FIG. 10, computer networks typically include multiple computers (e.g. client computers 10 and server computers 20) connected to a common computer communication network 15, for example the internet. In some computer networks, a server computer 20 provides services to a client computer 10. The client computer 10 can be a remote computer that accesses services over the computer network 15. The server computer 20, in turn, can access other networked computers providing services useful to the client for the benefit of the client instead of requiring the client to directly access those networked computers. In other computer networks, a group of computers is used to compute a single task, by dividing the task into separate portions that can be processed by different computers in the group of computers. In yet another arrangement, a group of computers receives multiple tasks. The multiple tasks are distributed among the computers in the group by a control computer. The control computer allocates tasks among the computers in the group and endeavors to ensure that each computer in the group has the same amount of work so that the computing load is balanced. If a group of computers does not have a balanced load, some of the computers can be idle while other computers can be inundated with tasks, thereby reducing the computing efficiency of the group of computers. Thus, it is important that a group of computers applied to a plurality of computing tasks be load balanced.
A great deal of attention has been given to load balancing computing tasks for groups of computers, both for dedicated processing networks and groups of computers available over the interne. Many such computing groups employ a controller to allocate tasks among the computers in a group. Tasks are sent to the controller, the controller tracks the task load of each computer in the group, and allocates new tasks to those computers having the smallest load. For example, U.S. Pat. No. 6,067,580 describes a distributed computing environment with an integrated work load manager to intelligently dispatch remote procedure calls among available application servers. Similarly, U.S. Pat. No. 6,304,967 discloses a computer network with one or more client computers. The client computers make requests to a first server computer that examines resources available on the first server computer and one or more second server computers and allocates the requests to load balance the requests among the first and second server computers. However, this approach requires the use of a controlling or allocating computer to distribute and track computing tasks and computer loads. Furthermore, the computing resources necessary to complete some indeterminate computing tasks, such as some image rendering tasks, are very unpredictable. Hence, simply tracking task allocation does not necessarily provide effective load balancing in a group of server computers, since a server computer could have fewer tasks but more work.
In another approach described in U.S. Pat. No. 5,603,031, a distributed computing environment employs agent processes that direct their own movement through a computer network. Agent processes can clone themselves when traveling along different network paths. Another method for balancing loads among server computers is described in U.S. Pat. No. 7,284,067. In this method, a load-balancing module is provided for each server and includes multiple network ports for receiving network traffic and coupling messages to its server or another module. Each module monitors the loading and health of its server and provides this information to the other modules. One or more master modules are directly connected to an external network and route received traffic based on a priority system. While these approaches provide a more distributed control and monitoring structure, they do not necessarily allocate indeterminate computing tasks effectively over a network of computers. Furthermore, the use of central task allocation modules creates potential computing bottlenecks and the need to monitor and communicate the status of each server to every other server creates overhead that can reduce the overall efficiency of the system.
Task responsiveness and efficiency are important characteristics of any computer application running on a computer network and are important issues for network service providers. In typical systems, a plurality of distributed client computers interacts with a different plurality of servers to perform a wide variety of different tasks. Since the tasks are often interactive and depend on a variety of different users with different objectives, the tasks tend to be unpredictable. Furthermore, as noted above, some of the tasks are indeterminate, that is the amount of time required to complete the task with a known resource cannot be readily determined. Hence, a system in which a task allocation computer distributes tasks to a group of server computers can be inefficient, create a communication or computing bottleneck, and provide poor load balancing. Alternative distributed processing systems can require a large amount of monitoring and communication overhead. Simply increasing the available network bandwidth or computing devices can be expensive.
In some applications, server computers can have different attributes or functions, for example storage facilities or processing capabilities. For example, in data-intensive applications, such as imaging applications, some server computers are responsible for storing and retrieving the data, while other server computers are responsible for processing the data. In such an arrangement, it is possible that a storage computer can be idle while a processor computer is busy, for example if the data retrieval time is less than the processing time or if multiple storage computers are employed and only a subset of the storage computers are employed to retrieve or store data for a data processing-task.
There remains a need, therefore, to improve networked computer services and provide responsive and efficient performance for given network and computing resources.